/**
 * @file DisplayManager.h
 * @brief OLED显示屏管理类头文件
 * 
 * 提供OLED显示屏的初始化、显示控制和状态管理功能
 */

#ifndef DISPLAYMANAGER_H
#define DISPLAYMANAGER_H

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <EEPROM.h>

class DisplayManager {
private:
    Adafruit_SSD1306 display;    ///< OLED显示对象
    int wifiStrength;            ///< WiFi信号强度等级
    float lastTemperature;       ///< 上一次温度值
    float lastHumidity;          ///< 上一次湿度值
    bool displayOn;              ///< 屏幕状态
    unsigned long displayInterval; ///< 屏幕更新间隔(ms)

public:
    DisplayManager();
    
    /**
     * @brief 初始化显示屏
     * @return true-初始化成功, false-初始化失败
     */
    bool init();
    
    /**
     * @brief 显示状态信息
     * @param line1 第一行文本
     * @param line2 第二行文本(可选)
     * @param line3 第三行文本(可选)
     */
    void showStatus(String line1, String line2 = "", String line3 = "");
    
    /**
     * @brief 显示气象数据(简约风格)
     * @param temperature 温度值
     * @param humidity 湿度值
     * @param rssi WiFi信号强度
     * @param wifiConnected WiFi连接状态
     * @param mqttConnected MQTT连接状态
     * @param ssid WiFi名称
     */
    void showSimpleWeatherData(float temperature, float humidity, int rssi, 
                              bool wifiConnected, bool mqttConnected, String ssid);
    
    /**
     * @brief 清空显示屏
     */
    void clear();
    
    /**
     * @brief 更新WiFi信号强度
     * @param rssi 信号强度值
     */
    void updateWifiStrength(int rssi);
    
    // 屏幕状态控制
    void turnOn();           ///< 开启屏幕
    void turnOff();          ///< 关闭屏幕
    void toggle();           ///< 切换屏幕状态
    bool isDisplayOn();      ///< 获取屏幕状态
    
    /**
     * @brief 强制刷新显示
     */
    void forceRefresh();
    
    // EEPROM相关方法
    void saveDisplayState(); ///< 保存屏幕状态到EEPROM
    bool loadDisplayState(); ///< 从EEPROM加载屏幕状态
    
    // 屏幕间隔控制
    void setDisplayInterval(unsigned long interval);  ///< 设置屏幕更新间隔
    unsigned long getDisplayInterval();               ///< 获取屏幕更新间隔
    void saveDisplayInterval();                       ///< 保存间隔到EEPROM
    bool loadDisplayInterval();                       ///< 从EEPROM加载间隔
};

#endif